'use strict'

const tok = require('../../lib/tok')

let verifyToken = async (ctx, next) => {
  let token = ctx.headers.authorization
  if (!token) {
    return ctx.status(401).send('!token is null')
  }
  //属性值：ok、data、errcode
  let r = tok.verifyAccessToken(token)

  if (!r.ok) {
    return ctx.status(401).send(r.errcode)
  }

  //r.data是解密出来的用户信息
  //把此信息放在ctx.box上，后续中间件和请求处理函数可以直接使用
  ctx.box.user = r.data

  await next()
}

//中间件配置文件的导出是一个数组
//数组顺序就是中间件的执行顺序
module.exports = [
  {
    //pre为true表示在接收body数据之前执行
    pre: true,
    middleware: verifyToken
  }
]
